package com.alili_tv.system.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.lzhpo.sensitive.SensitiveStrategy;
import com.lzhpo.sensitive.annocation.Sensitive;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 用户表
 * </p>
 *
 * @author baomidou
 * @since 2023-03-17
 */
@Getter
@Setter
@ToString
public class User implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 昵称，为空时，前端自动拼接ali_{id}
     */
    private String name;

    /**
     * 头像文件名称
     */
    private String headshot;

    /**
     * 密码
     */
    @TableField(select = false)
    private String password;

    /**
     * 1：男，2：女，0：保密
     */
    private Byte gender;

    /**
     * 注册方式之一
     */
    @Sensitive(strategy = SensitiveStrategy.EMAIL) // 脱敏处理
    private String email;

    /**
     * 注册方式之一
     */
    @Sensitive(strategy = SensitiveStrategy.MOBILE_PHONE)
    private String phone;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 用户频道排序
     */
    private String channelSort;

    /**
     * 用户上一次点开动态的时间
     */
    private LocalDateTime dynamic;

    /**
     * 用户上一次点开消息的时间
     */
    private LocalDateTime message;

    /**
     * token
     */
    @TableField(exist = false)
    private String token;

    /**
     * 用户登录时的手机号或者邮箱
     */
    @TableField(exist = false)
    private String account;

    @TableField(exist = false)
    private Long fansCount;

    /**
     * 验证码
     */
    @TableField(exist = false)
    private String code;

    /**
     * 判断用户是否已经关注
     */
    @TableField(exist = false)
    private Boolean isFollow;

    /**
     * 是否有新的动态
     */
    @TableField(exist = false)
    private Boolean newDynamic;

    /**
     * 是否有新消息
     */
    @TableField(exist = false)
    private Boolean newMessage;

    /**
     * 第二个验证码，用于更换新手机号和新邮箱号
     */
    @TableField(exist = false)
    private String secondCode;


}

